﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;
using System.Data.SqlClient;

namespace VerdePimienta2._0
{
    public partial class CierreCaja : Form
    {
        string constring = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\VP\\des_VP.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
        //string constring = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\VP\\verdepimientadb.mdf;Integrated Security=True;User Instance=True";
        //string constring = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\Documents and Settings\\Chema\\Mis documentos\\Visual Studio 2008\\Projects\\VerdePimienta2.0\\VerdePimienta2.0\\verdepimientadb.mdf;Integrated Security=True;User Instance=True";
        public CierreCaja()
        {
            InitializeComponent();
        }

        //Inicialiazar variables globales panel
        float TotalEfectivo = 0;
        float TotalTarjeta = 0;
        float TotalVisa = 0;
        float TotalCheque = 0;
        float TotalTransferencia = 0;
        float TotalDevoluciones = 0;
        float Total = 0;

        float VentasFlor = 0;
        float VentasPlanta = 0;
        float VentasSeco = 0;
        float VentasPortes = 0;
        float VentasInterflora = 0;
        float VentasBase = 0;
        float VentasBoda = 0;
        float VentasDeco = 0;

        int cantFlor = 0;
        int cantPlanta = 0;
        int cantSeco = 0;
        int cantPortes = 0;
        int cantInterflora = 0;
        int cantBase = 0;
        int cantBoda = 0;
        int cantDeco = 0;

        private void CierreCaja_Load(object sender, EventArgs e)
        {
          
            RellenarComboEmpleados r = new RellenarComboEmpleados();
            r.RellenarComboE(cmbEmpladCierre);

            SqlConnection conCierre = new SqlConnection(constring);
            conCierre.Open();

            cmbEmpladCierre.SelectedIndex = 0;

            //**************************Rellenar datos APERTURA**********************************************************************
            try
            {
                SqlDataAdapter daA = new SqlDataAdapter("Select * From Aperturas where Fecha = @Hoy", conCierre);
                daA.SelectCommand.Parameters.AddWithValue("@Hoy", DateTime.Today.ToShortDateString());
                DataSet dsA = new DataSet("Aperturas");
                daA.FillSchema(dsA, SchemaType.Source, "Aperturas");
                daA.Fill(dsA, "Aperturas");
                DataTable tblA;
                tblA = dsA.Tables["Aperturas"];
                DataRow[] drA = dsA.Tables["Aperturas"].Select();

                string cantAp = drA[0]["Cantidad"].ToString();
                txtCantAperCierre.Text = cantAp;

                string empAp = drA[0]["Empleado"].ToString();
                txtEmpAperCierre.Text = empAp;
            }
            catch (Exception exc)
            {
                MessageBox.Show("Error en carga datos apertura." + exc.Message,"Error apertura.",MessageBoxButtons.OK,MessageBoxIcon.Error);
                
            }
            //***************************Rellenar INGRESOS Y PAGOS******************************************************************************
            try
            {
                SqlDataAdapter daP = new SqlDataAdapter("Select * From Operaciones where Fecha = @Hoy", conCierre);
                daP.SelectCommand.Parameters.AddWithValue("@Hoy", DateTime.Today.ToShortDateString());
                DataSet dsP = new DataSet("Operaciones");
                daP.FillSchema(dsP, SchemaType.Source, "Operaciones");
                daP.Fill(dsP, "Operaciones");
                DataTable tblP;
                tblP = dsP.Tables["Operaciones"];

                dataGridView1.DataSource = dsP.Tables["Operaciones"].DefaultView;
            }
            catch (Exception exc)
            {
                MessageBox.Show("Error en carga datos Ingresos y pagos." + exc.Message, "Error Ingresos pagos.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            //***************************Cálculos VENTAS**********************************************************************************
            TotalEfectivo = 0;
            TotalTarjeta = 0;
            TotalVisa = 0;
            TotalCheque = 0;
            TotalTransferencia = 0;
            TotalDevoluciones = 0;
            Total = 0;

            VentasFlor = 0;
            VentasPlanta = 0;
            VentasSeco = 0;
            VentasPortes = 0;
            VentasInterflora = 0;
            VentasBase = 0;
            VentasBoda = 0;
            VentasDeco = 0;

            cantFlor = 0;
            cantPlanta = 0;
            cantSeco = 0;
            cantPortes = 0;
            cantInterflora = 0;
            cantBase = 0;
            cantBoda = 0;
            cantDeco = 0;

            //EFECTIVO
            try
            {

                SqlDataAdapter daEfectivo = new SqlDataAdapter("Select TotalEntregado From Ventas where TipoPago = 'Efectivo' and Fecha = @Hoy", conCierre);
                daEfectivo.SelectCommand.Parameters.AddWithValue("@Hoy", DateTime.Today.ToShortDateString());
                DataSet dsEfectivo = new DataSet("Ventas");
                daEfectivo.FillSchema(dsEfectivo, SchemaType.Source, "Ventas");
                daEfectivo.Fill(dsEfectivo, "Ventas");
                DataTable tblEfectivo;
                tblEfectivo = dsEfectivo.Tables["Ventas"];
                DataRow[] drEfectivo = dsEfectivo.Tables["Ventas"].Select();
                foreach (DataRow rowE in drEfectivo)
                {
                    TotalEfectivo = TotalEfectivo + float.Parse(rowE["TotalEntregado"].ToString());
                }
                txtEfecCierre.Text = TotalEfectivo.ToString();
            }
            catch (Exception exc)
            {
                MessageBox.Show("Error en carga datos efectivo." + exc.Message, "Error egectivo.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            //TARJETA
            try
            {
                SqlDataAdapter daTarjeta = new SqlDataAdapter("Select TotalEntregado From Ventas where TipoPago='Tarjeta' and Fecha = @Hoy", conCierre);
                daTarjeta.SelectCommand.Parameters.AddWithValue("@Hoy", DateTime.Today.ToShortDateString());
                DataSet dsTarjeta = new DataSet("Ventas");
                daTarjeta.FillSchema(dsTarjeta, SchemaType.Source, "Ventas");
                daTarjeta.Fill(dsTarjeta, "Ventas");
                DataTable tblTarjeta;
                tblTarjeta = dsTarjeta.Tables["Ventas"];
                DataRow[] drTarjeta = dsTarjeta.Tables["Ventas"].Select();
                foreach (DataRow rowT in drTarjeta)
                {
                    TotalTarjeta = TotalTarjeta + float.Parse(rowT["TotalEntregado"].ToString());
                }
                txtTarjetCierre.Text = TotalTarjeta.ToString();
            }
            catch (Exception exc)
            {
                MessageBox.Show("Error en carga datos tarjeta." + exc.Message, "Error tarjeta.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            //VISA
            try
            {
                SqlDataAdapter daVisa = new SqlDataAdapter("Select TotalEntregado From Ventas where TipoPago='Visa' and Fecha = @Hoy", conCierre);
                daVisa.SelectCommand.Parameters.AddWithValue("@Hoy", DateTime.Today.ToShortDateString());
                DataSet dsVisa = new DataSet("Ventas");
                daVisa.FillSchema(dsVisa, SchemaType.Source, "Ventas");
                daVisa.Fill(dsVisa, "Ventas");
                DataTable tblVisa;
                tblVisa = dsVisa.Tables["Ventas"];
                DataRow[] drVisa = dsVisa.Tables["Ventas"].Select();
                foreach (DataRow rowV in drVisa)
                {
                    TotalVisa = TotalVisa + float.Parse(rowV["TotalEntregado"].ToString());
                }
                txtVisaCierre.Text = TotalVisa.ToString();
            }
            catch (Exception exc)
            {
                MessageBox.Show("Error en carga datos visa." + exc.Message, "Error visa.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            //CHEQUE
            try
            {
                SqlDataAdapter daCheque = new SqlDataAdapter("Select TotalEntregado From Ventas where TipoPago='Cheque' and Fecha = @Hoy", conCierre);
                daCheque.SelectCommand.Parameters.AddWithValue("@Hoy", DateTime.Today.ToShortDateString());
                DataSet dsCheque = new DataSet("Ventas");
                daCheque.FillSchema(dsCheque, SchemaType.Source, "Ventas");
                daCheque.Fill(dsCheque, "Ventas");
                DataTable tblCheque;
                tblCheque = dsCheque.Tables["Ventas"];
                DataRow[] drCheque = dsCheque.Tables["Ventas"].Select();
                foreach (DataRow rowC in drCheque)
                {
                    TotalCheque = TotalCheque + float.Parse(rowC["TotalEntregado"].ToString());
                }
                txtCheqCierre.Text = TotalCheque.ToString();
            }
            catch (Exception exc)
            {
                MessageBox.Show("Error en carga datos cheque." + exc.Message, "Error cheque.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            //TRANSFERENCIA
            try
            {
                SqlDataAdapter daTransferencia = new SqlDataAdapter("Select TotalEntregado From Ventas where TipoPago='Transferencia' and Fecha = @Hoy", conCierre);
                daTransferencia.SelectCommand.Parameters.AddWithValue("@Hoy", DateTime.Today.ToShortDateString());
                DataSet dsTransferencia = new DataSet("Ventas");
                daTransferencia.FillSchema(dsTransferencia, SchemaType.Source, "Ventas");
                daTransferencia.Fill(dsTransferencia, "Ventas");
                DataTable tblTransferencia;
                tblTransferencia = dsTransferencia.Tables["Ventas"];
                DataRow[] drTransferencia = dsTransferencia.Tables["Ventas"].Select();
                foreach (DataRow rowT in drTransferencia)
                {
                    TotalTransferencia = TotalTransferencia + float.Parse(rowT["TotalEntregado"].ToString());
                }
                txtTrnasferCierre.Text = TotalTransferencia.ToString();
            }
            catch (Exception exc)
            {
                MessageBox.Show("Error en carga datos transferencia." + exc.Message, "Error transferencia.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            //DEVOLUCIONES
            try
            {
                SqlDataAdapter daDevol = new SqlDataAdapter("Select TotalEntregado From Ventas where Total<'0' and Fecha = @Hoy", conCierre);
                daDevol.SelectCommand.Parameters.AddWithValue("@Hoy", DateTime.Today.ToShortDateString());
                DataSet dsDevol = new DataSet("Ventas");
                daDevol.FillSchema(dsDevol, SchemaType.Source, "Ventas");
                daDevol.Fill(dsDevol, "Ventas");
                DataTable tblDevol;
                tblDevol = dsDevol.Tables["Ventas"];
                DataRow[] drDevol = dsDevol.Tables["Ventas"].Select();
                foreach (DataRow rowD in drDevol)
                {
                    TotalDevoluciones = TotalDevoluciones + float.Parse(rowD["TotalEntregado"].ToString());
                }
                txtDevoluciones.Text = TotalDevoluciones.ToString();
            }
            catch (Exception exc)
            {
                MessageBox.Show("Error en carga datos devoluciones." + exc.Message, "Error devoluciones.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            //TOTAL
            Total = TotalEfectivo + TotalTarjeta + TotalVisa + TotalCheque + TotalTransferencia + TotalDevoluciones;
            txtTotalVentasCierre.Text = Total.ToString();

            //*******************************Cálculos PRODUCTOS*********************************************************+            
            try{
            SqlDataAdapter daV = new SqlDataAdapter("Select Id From Ventas where Fecha = @Hoy", conCierre);
            daV.SelectCommand.Parameters.AddWithValue("@Hoy", DateTime.Today.ToShortDateString());
            DataSet dsV = new DataSet("Ventas");
            daV.FillSchema(dsV, SchemaType.Source, "Ventas");
            daV.Fill(dsV, "Ventas");
            DataTable tblV;
            tblV = dsV.Tables["Ventas"];
            DataRow[] drV = dsV.Tables["Ventas"].Select();
            foreach (DataRow rowV in drV)
            {
                string idV = rowV["Id"].ToString();
                SqlDataAdapter daProd = new SqlDataAdapter("Select * From Productos where IdVenta = @ID", conCierre);
                daProd.SelectCommand.Parameters.AddWithValue("@ID", idV);
                DataSet dsProd = new DataSet("Productos");
                daProd.FillSchema(dsProd, SchemaType.Source, "Productos");
                daProd.Fill(dsProd, "Productos");
                DataTable tblProd = dsProd.Tables["Productos"];
                DataRow[] drProd = dsProd.Tables["Productos"].Select();
                foreach (DataRow rowProd in drProd)
                {
                    if (rowProd["Tipo"].ToString() == "1 - Flor")
                    {
                        float PrecioFlor = float.Parse(rowProd["NumUnidades"].ToString()) * float.Parse(rowProd["PrecioUnidad"].ToString());
                        VentasFlor = VentasFlor + PrecioFlor;
                        cantFlor = cantFlor + int.Parse(rowProd["NumUnidades"].ToString());
                    }

                    if (rowProd["Tipo"].ToString() == "2 - Planta")
                    {
                        float PrecioPlanta = float.Parse(rowProd["NumUnidades"].ToString()) * float.Parse(rowProd["PrecioUnidad"].ToString());
                        VentasPlanta = VentasPlanta + PrecioPlanta;
                        cantPlanta = cantPlanta + int.Parse(rowProd["NumUnidades"].ToString());
                    }

                    if (rowProd["Tipo"].ToString() == "3 - Seco")
                    {
                        float PrecioSeco = float.Parse(rowProd["NumUnidades"].ToString()) * float.Parse(rowProd["PrecioUnidad"].ToString());
                        VentasSeco = VentasSeco + PrecioSeco;
                        cantSeco = cantSeco + int.Parse(rowProd["NumUnidades"].ToString());
                    }

                    if (rowProd["Tipo"].ToString() == "4 - Portes")
                    {
                        float PrecioPortes = float.Parse(rowProd["NumUnidades"].ToString()) * float.Parse(rowProd["PrecioUnidad"].ToString());
                        VentasPortes = VentasPortes + PrecioPortes;
                        cantPortes = cantPortes + int.Parse(rowProd["NumUnidades"].ToString());
                    }

                    if (rowProd["Tipo"].ToString() == "5 - Interflora")
                    {
                        float PrecioInterflora = float.Parse(rowProd["NumUnidades"].ToString()) * float.Parse(rowProd["PrecioUnidad"].ToString());
                        VentasInterflora = VentasInterflora + PrecioInterflora;
                        cantInterflora = cantInterflora + int.Parse(rowProd["NumUnidades"].ToString());
                    }

                    if (rowProd["Tipo"].ToString() == "6 - Bases")
                    {
                        float PrecioBase = float.Parse(rowProd["NumUnidades"].ToString()) * float.Parse(rowProd["PrecioUnidad"].ToString());
                        VentasBase = VentasBase + PrecioBase;
                        cantBase = cantBase + int.Parse(rowProd["NumUnidades"].ToString());
                    }

                    if (rowProd["Tipo"].ToString() == "7 - Boda")
                    {
                        float PrecioBoda = float.Parse(rowProd["NumUnidades"].ToString()) * float.Parse(rowProd["PrecioUnidad"].ToString());
                        VentasBoda = VentasBoda + PrecioBoda;
                        cantBoda = cantBoda + int.Parse(rowProd["NumUnidades"].ToString());
                    }

                    if (rowProd["Tipo"].ToString() == "8 - Decoración")
                    {
                        float precioDeco = float.Parse(rowProd["NumUnidades"].ToString()) * float.Parse(rowProd["PrecioUnidad"].ToString());
                        VentasDeco = VentasDeco + precioDeco;
                        cantDeco = cantDeco + int.Parse(rowProd["NumUnidades"].ToString());
                    }
                    }
                }
            }
                 catch (Exception exc)
            {
                MessageBox.Show("Error en carga datos productos." + exc.Message,"Error productos.",MessageBoxButtons.OK,MessageBoxIcon.Error);
            }
            

            TxtNumFlorCierre.Text = cantFlor.ToString();
            txtNumPlantaCierre.Text = cantPlanta.ToString();
            txtNumSecoCierre.Text = cantSeco.ToString();
            txtNumPortesCierre.Text = cantPortes.ToString();
            txtNumInterCierre.Text = cantInterflora.ToString();
            txtNumBaseCierre.Text = cantBase.ToString();
            txtNumBodasCierre.Text = cantBoda.ToString();
            txtNumDecoCierre.Text = cantDeco.ToString();

            txtCantFlorCierre.Text = VentasFlor.ToString();
            txtCantPlantaCierre.Text = VentasPlanta.ToString();
            txtCantSecoCierre.Text = VentasSeco.ToString();
            txtCantPortesCierre.Text = VentasPortes.ToString();
            txtCantInterCierre.Text = VentasInterflora.ToString();
            txtCantBaseCierre.Text = VentasBase.ToString();
            txtCantBodasCierre.Text = VentasBoda.ToString();
            txtCantDecoCierre.Text = VentasDeco.ToString();

            conCierre.Close();
        }

        private void btnCierre_Click(object sender, EventArgs e)
        {
            if (cmbEmpladCierre.Text == "(Seleccione)")
            {
                MessageBox.Show("Debe rellenar la casilla de empleado para realizar el cierre", "Cierre.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            else 
            {
                DialogResult drCie = MessageBox.Show("¿Está seguro de realizar el cierre?", "Cierre.", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
                if (drCie == DialogResult.OK)
                {
                    try
                    {
                        //Abrir conexión
                        SqlConnection conC = new SqlConnection(constring);
                        conC.Open();
                        SqlDataAdapter daC = new SqlDataAdapter("Select * From Cierres", conC);
                        DataSet dsC = new DataSet("Cierres");
                        daC.FillSchema(dsC, SchemaType.Source, "Cierres");
                        daC.Fill(dsC, "Cierres");
                        DataTable tblC;
                        tblC = dsC.Tables["Cierres"];
                        DataRow drC = tblC.NewRow();

                        //Guardar datos CIERRE en la tabla                            
                        drC["Empleado"] = cmbEmpladCierre.Text;
                        drC["Observaciones"] = txtObservCierre.Text;
                        drC["Hora"] = dateHoraCierre.Text;
                        drC["Fecha"] = dateHoraCierre.Text;
                        drC["TotalEfectivo"] = TotalEfectivo.ToString();
                        drC["TotalTarjeta"] = TotalTarjeta.ToString();
                        drC["TotalVisa"] = TotalVisa.ToString(); 
                        drC["TotalCheque"] = TotalCheque.ToString();
                        drC["TotalTransferencia"] = TotalTransferencia.ToString();
                        drC["TotalDevoluciones"] = TotalDevoluciones.ToString();
                        drC["TotalVentas"] = Total.ToString();
                        drC["NumeroFlores"] = cantFlor.ToString();
                        drC["NumeroPlantas"] = cantPlanta.ToString();
                        drC["NumeroSeco"] = cantSeco.ToString();
                        drC["NumeroPortes"] = cantPortes.ToString();
                        drC["NumeroInterFlora"] = cantInterflora.ToString();
                        drC["NumeroBase"] = cantBase.ToString();
                        drC["NumeroBoda"] = cantBoda.ToString();
                        drC["NumeroDecoracion"] = cantDeco.ToString();
                        drC["CantidadFlores"] = VentasFlor.ToString();
                        drC["CantidadPlantas"] = VentasPlanta.ToString();
                        drC["CantidadSeco"] = VentasSeco.ToString();
                        drC["CantidadPortes"] = VentasPortes.ToString();
                        drC["CantidadInterFlora"] = VentasInterflora.ToString();
                        drC["CantidadBase"] = VentasBase.ToString();
                        drC["CantidadBoda"] = VentasBoda.ToString();
                        drC["CantidadDecoracion"] = VentasDeco.ToString();

                        //Guardar la nueva línea en la tabla
                        tblC.Rows.Add(drC);                        
                        SqlCommandBuilder objCommandBuilderC = new SqlCommandBuilder(daC);
                        daC.Update(dsC, "Cierres");                   

                        MessageBox.Show("Cierre realizado con éxito", "Cierre.", MessageBoxButtons.OK, MessageBoxIcon.Information);

                        SqlCommand cmd = new SqlCommand();
                        cmd.CommandText = "Update ControlCierre set Abierta = 0,FechaUltimaOperacion = " + DateTime.Today.ToShortDateString();
                        cmd.Connection = conC;
                        int i = cmd.ExecuteNonQuery();
                        //Cerrar conexión
                        conC.Close();
                        Close();
                    }
                    catch (Exception excAp)
                    {
                        MessageBox.Show("Error en acceso a base de datos.", excAp.Message, MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
            }
        }
               
        
    }
}
